به گزارش سافت گذر و به نقل ازمجله شبکه؛ جیم
گتیز با بررسی پینگها و سطوح مختلفی از بارگذاری اتصال اینترنت به این
نتیجه رسید که زمان بازگشت پاسخ درخواست از اینترنت اغلب بین چهار تا ده
برابر از آن چه او انتظار داشت طولانیتر میشد. و این گونه بود که او
پدیدهای به نام bufferbloat را معرفی كرد. نتیجه گیری او این بود که
بستههای داده ضروری در بافرهایی گیر افتاده بودند که بیش از حد بزرگ شده
بود.
از
آن زمان گتیز مشاهدات خود را گردآوری و منتشر کرد. محققانی از شرکتهایی
مثل سیسکو و گوگل، و همچنین گروههای تعیین استاندارد مثل IETF و محققان
ارشد دانشگاهی شروع به تحقیق، آزمايش و نوشتن در مورد bufferbloat کردند.
آنچه امروز مشخص است این است که پدیده bufferbloat واقعیت دارد، اما هنوز
به طور کامل مشخص نشده است که میزان تاثیر آن روی گردش طبیعی ترافیک
اینترنت تا چه اندازه است.
چه کسی بیشترین تاثیر را از این پدیده خواهد دید؟
هر
کسی که مشغول وبگردی یا استفاده از موتورهای جستجو باشد، درگیر خواهد شد.
همچنین کسانی که از اپلیکیشنهای زنده نظير برنامههای صوتی و تصویری
استفاده میکنند نیز تحت تاثیر قرار خواهند گرفت. یک مثال در این مورد
کارمندانی هستند که در خانه، جاده، هتل یا هات اسپاتهای وایفای کارهای
خود را انجام میدهند. تحقيقات نشان میدهد که هتلها و مراکز ارائه خدمات
وایفای بیشترین تاثیر منفی را از پدیده bufferbloat دریافت میکنند.
کدام نوع از ترافیکها بیشترین تاثیر را از این پدیده خواهند گرفت؟
جریان
ترافیک روی لینکهایی که مصرف پهنای باند زیادی دارند درگیر خواهند شد.
کاربردهایی مثل VoIP ،DNS و ARP که از بستههای داده کوچک استفاده میکنند
نیز میتوانند دچار این مشکل شوند. تاثیر روی VoIP به صورت افزایش تاخیر و
تغییر صدا ظاهر میشود. زمان پاسخ تبادلات DNS نیز ممکن است بین دو تا هشت
برابر بیشتر از حالت عادی به طول بیانجامد.
چگونه مشکلی که میتواند تا این اندازه روی عملکرد اینترنت تاثیرگذار باشد این همه مدت مخفی نگه داشته شده است؟
سه
دلیل اصلی برای آن وجود دارد. اول، این مشکل رابطه مستقیمی با نحوه
عملکرد پروتکل TCP و چگونگی مدیریت بافرها در شبکه دارد که هنوز به طور
کامل نحوه کارکرد آن مشخص نشده است. دوم، یک باور همگانی وجود دارد که ریزش
و از بین رفتن بستهها در اینترنت همیشه یک عارضه منفی است. اما واقعیت
این است که ریزش بستهها برای کارکرد صحیح TCP یک امر کاملا ضروری است. و
سوم، خیلیها معتقدند که این روش برای برطرف کردن تقريبا هر خطایی در
عملکرد و برای اضافه کردن پهنای باند است.
Bufferbloat دقیقا چیست؟
به
منظور کم کردن تعداد بستههای گم شده داده در اینترنت، اپراتورهای شبکه،
توسعه دهندگان و مهندسان برای چندین بار متوالی اندازه بافرهای شبکه را
افزایش دادهاند. این کار با وجودی که زمان پاسخگویی را افزایش میدهد اما
تاثیر کمی روی عملکرد کلی دارد. به تبع آن، بستههای کوچک ضروری مثل
آنهایی که در VoIP ،DNS و TCP استفاده میشود ممکن است در بافرهای بستههای
بزرگتر مربوط به انتقال فایل و یا سایر نقل و انتقالات دستهای دیگر مثل
بیت ریتهای تطبیقی ویدیو گرفتار شوند.
یک
مشکل مفهومی مرتبط با مدیریت بافر، آزمايشات، برگههای سفید و حتی
راهنماهایی که اغلب بافرها را به عنوان بخش کوچکی از حافظه معرفی میکنند
وجود دارد. خیلی از اوقات بافرها میتوانند صدها یا حتی هزاران بسته را در
لحظه نگهداری کنند. اینها تنها محدود به دستگاههای شبکه نمیشوند. آنها را
میتوان در پروتکل ایستگاههای کاری، درايور کارت شبکه و هر گذرگاهی در
مسیر رسیدن به انتهای ایستگاه نیز مشاهده کرد.
صدمات bufferbloat در عملکرد TCP به چه شکل است؟
بخش
عمدهای از ترافیک شبکه ما از TCP به عنوان پروتکل نقل و انتقال استفاده
میکند. آشنایی با نحوه عملکرد TCP مشخص میکند که چرا bufferbloat مشکل
ساز میشود. وقتی یک اتصال TCP برقرار میشود یک ارتباط سه جانبه برقرار
میشود که در آن درخواستهای ارسال و دریافت TCP در مورد تبادل پارامترهای
خود (از جمله شماره توالیهای اولیه) با یک دیگر گفتگو میکنند.
فرض
کنید که از یک سرور FTP خواسته شده تا یک فایل حجیم را منتقل کند. TCP
معمولا عملیات انتقال را با ارسال چهار سگمنت آغاز میکند و بعد در انتظار
تایید تحویل آنها میماند. سیاست معمول به این صورت است که بعد از هر سگمنت
دریافت شده یک نشانه دریافت تاییدیه (ACK) نیز ارسال میشود. بعد از این
که هر چهار سگمنت نشانه دریافت را ارسال کردند، گیرنده با ارسال هشت سگمنت
نرخ سرعت ارسال را افزایش میدهد و در انتظار دریافت تاییدیه میماند. بعد
از تایید شدن این سگمنتها به همین ترتیب نرخ ارسال به 16 و بالاتر افزایش
میابد.
این مرحله از تحویل است که از
آن به عنوان شروع کند یاد میشود. ایده رفع آن این است که لینک را با
بستهها اشباع کنند. اما در مرحلهای که آستانه شروع کند نام دارد، ارسال
کننده به جای دو برابر کردن نرخ سرعت، با اضافه کردن یک سگمنت در هر چرخه
نرخ سرعت را به آهستگی افزایش میدهد. در این بین یک مشکل اساسی به وجود
میآید که در آن بر اثر سر ریز شدن یک بافر، اتصال با افزایش بار مواجه
میشود. در این شرایط یک یا چند بسته از بین خواهد رفت. وقتی ارسال کننده
تشخیص میدهد که این اتفاق رخ داده است معمولا نرخ ارسال را به نصف کاهش
میدهد و یک بار دیگر فرآیند شروع کند را از سر میگیرد. سرانجام نرخ TCP
با ظرفیت چرخهای که در ابتدا شروع شده بود مطابقت پیدا میکند. این مجموعه
ترکیبی از مراحل به عنوان الگوریتم کنترل تراکم TCP شناخته میشود.
Bufferbloat چگونه روی این فرآيند تاثیر میگذارد؟
یک
اتصال بین یک لینک پر سرعت و یک لینک کم سرعت را در نظر بگیرید. در چنین
مواردی است که اهمیت وجود بافر مشخص میشود. برای مثال، فرض کنید ما یک
مسیر محلی یک گیگابیت در ثانیه مثل کابل یا مودم DSL در اختیار داریم. حالا
تصور کنید این مودم به یک خدمات دهنده اینترنت (ISP) متصل شده است که نرخ
دانلود 10 مگابيت در ثانیه و آپلود 2 مگابیت در ثانیه را فراهم میکند.
سرور FTP بافر ارسال شده به اتصال پر سرعت را خیلی سریعتر از نرخ خروج
لینک کندتر پر میکند.
حالا اگر این
بافر بزرگ باشد دو اتفاق ممکن است رخ دهد: اول، اگر بافر پر شود، آخرین
بسته رسیده از بین میرود. به این اتفاق tail drop گفته میشود. نشانه
تاییدیه که این از بین رفتن بسته را به ارسال کننده اطلاع میدهد تا زمان
رسیدن بسته بعدی ارسال نخواهد شد و در چنین شرایطی عملا این پیام غیر قابل
استفاده خواهد بود. گذر این فرآيند از بین یک بافر بزرگ زمان قابل
ملاحظهای را تلف میکند. آزمايشات انجام گرفته روی بیت ریتهای تطبیقی
ویدیو نشان میدهد که قبل از این که ایستگاه بتواند سگمنت از بین رفته را
دوباره ارسال کند نزدیک به 200 سگمنت باید تحویل داده شود. همچنین اگر در
زمان انتشار ویدیو چندین رشته جریان در حال عبور باشد، این صف ممکن است از
صف ارسال جلو بزند. با وجود بستههای ترمیمی در این صف یک حالت پایدار به
وجود میآید. اگر این مقدار به اندازهای نباشد که بتواند بافر را سر ریز
کند، هیچ بستهای از بین نمیرود و کنترل تراکم TCP نیز اتفاق نخواهد
افتاد. اما زمان تاخیر برای تمام کاربران این بافر افزایش پیدا خواهد کرد.
مدیریت بافرها
برای
مدتی عقیده بر این بود که باید صف درخواستهای شبکه را مدیریت کرد. برای
اولويت دادن به یک ترافیک خاص میتوان بیتهای IP layer diffserv را به
گونهای تنظیم کرد تا به انواع خاصی از ترافیک مثل کنترل شبکه یا VoIP
ارجهیت بالاتری داده شود. آنها این کار را با قرار دادن این ترافیکهای
اولويتدار در صفهای جداگانه انجام میدادند. اما انجام این کار از
bufferbloat جلوگیری نمیکند. بعضی از صفهایی که ترافیک بدون اولويت در آن
قرار دارد همچنان با مشکل بزرگ شدن بیش از حد مواجه هستند. اینها اغلب
شامل سگمنتهای TCP خیلی بزرگ هستند. بنابراین ما همچنان با مشکل تاثیر
منفی مکانیسم تراکم TCP مواجه هستیم.
در
سال 2012، کتی نیکولز و ون جیکوبسن یک تکنیک به نام CoDel یا Controlling
Queue Delay را معرفی کردند. این شیوه با ردگیری زمانی که یک بسته در صف
قرار دارد این صف را مدیریت میکند، چرا که مدت زمان اشغال یک صف مسئله
بسیار مهمی است. دو پارامتر فاصله و آستانه از اهمیت بسیار بالایی
برخوردار هستند. اگر تاخیر فاصله بین بستهها طولانیتر از مقصد باشد،
بستهها به طور تصادفی شروع به از بین رفتن میکنند. توجه داشته باشید که
این تکنیک به اندازه صفها و tail-drop وابسته نیست. نتایج آزمايشات انجام
گرفته نشان میدهد که در حالت کلی وضعیت تاخیر در پاسخدهی در این شیوه
بهتر از تکنیک RED م(Random Early
Discard) رفتار میکند و نتایج کلی به مراتب بهتر است. این موضوع در زمان
استفاده از لینکهای بیسیم بیشتر دیده میشود.
توصیه
بعدی برای کاهش تاثیر پدیده bufferbloat توسط دیو تات، اریک دومازت، جیم
گتیز و چند نفر دیگر مطرح شده است. نام این شیوه fq-codel است و هدف از آن
ایجاد یک تاثیر یکنواختتر در جریانهای عبوری از طریق صفها است. حتی کتی
نیکولز و ون جیکوبسن نیز تاثیرات مثبت استفاده از fq-codel را تایید
کردهاند. این شیوه به طور پیش فرض صفها را به زیر شاخههای 1024 تقسیم
میکند. سپس به طور تصادفی به هر جریان جدید یک صف جداگانه اختصاص میدهد.
داخل هر زیر شاخه از Codel برای کمک به کنترل تراکم TCP استفاده میشود.
Codel و fq-codel چه کاری انجام میدهند؟
اول،
این دو تکنیک وظیفه نظارت بر انجام صحیح عملیات کنترل تراکم TCP را بر
عهده دارند. دوم، با ترکیب بستههای موجود در صفها، باعث میشوند تا
بستههای کوچک ضروری مثل پاسخهای DNS و نشانههای TCP در دام صفهای
طولانی گرفتار نشوند. به عبارت ديگر، با استفاده از این شیوه نحوه برخورد
با بستههای بزرگ و کوچک با تساوی بیشتری انجام خواهد شد. تحقيقات زیادی
نشان داده است که مزایای استفاده از fq-codel به مراتب بیشتر است. fq-codel
تنها در آخرین توزیعهای لینوکس به کار گرفته شده است.
آینده به چه سمتی پیش خواهد رفت؟
متاسفانه
آگاهی از وجود پدیده bufferbloat هنوز فراگير نشده است. ما به اپراتورهای
شبکه و کاربران بیشتری نیاز داریم تا از آزمونهای در دسترسی مثل ICSI
Netylyzr و www.DSLReports/speedtest/
استفاده کنند. بعد از انجام این آزمايشات در صورتی که به میزان قابل
ملاحظهای از مشکلات bufferbloat برخورد کردید، میتوانید از چندین روش
جایگزین استفاده کنید:
1- دسترسی
سختافزار خود را به دستگاههایی که از یک توزیع جدید لینوکس مجهز به
fq-codel استفاده میکنند تغییر دهید. اطمینان حاصل کنید که این قابلیت
فعال باشد.
2- یک دستگاه بین کامپیوتر و
روتری که قابلیت fq-codel در آن فعال است قرار دهید. این کار باعث محدود
شدن استفاده از بافرهای حجیم روتر میشود.
3-
اگر تمام موارد مطرح شده با شکست مواجه شد، روی لینکهای آپلود و دانلود
محدودیت نرخ تبادل به میزان کمی کمتر از نرخ ظرفیت آنها اعمال کنید. این
کار کمک میکند تا از تشکیل بافرهای حجیم جلوگیری شود. انجام این کار اگرچه
ممکن است در بارهای کاری سبک به میزان اندکی توان عملیاتی را کاهش دهد،
اما به شکل قابل ملاحظهای وضعیت جریانهای ضروری مثل تاییدیههای DNS ،
ARP و TCP را بهبود ميبخشد.
در حال
حاضر چندین فروشنده تجهيزات شبکه مشتاق برای کاستن از اثرات مخرب
bufferbloat وجود دارد. سیسکو طی یک همکاری مشترک با کامکست، یک تکنیک
مدیریت صف به نام PIEو(Proportional Integral controller Enhanced) را توسعه داده است.
Time-Warner
Cable نیز گامهای مثبتی را در جهت کم کردن اثرات bufferbloat برداشته
است. Actiontec که یک تامین کننده عمده برای شاهراههای محلی Verizon و
Centurylink است، تحقيقاتی زیادی در مورد bufferbloat کرده است. آنها مدعی
هستند پیشرفتهای زیادی در راه کم کردن تاثیرات این پدیده داشتهاند. اما
برخی از فروشندگان دیگر نیز هستند که به نظر میرسد اطلاع چندانی از
bufferbloat ندارند. این وضعیتی است که باید هر چه زودتر تغییر کند. بسیار
حیاتی است که یک درک همه جانبه از این موضوع شکل گیرد که نتیجه کلی به ویژه
در فعالیتهایی مثل وبگردی، مهمترین عامل ضرر و زیان نیست. بلکه اصلیترین
عامل تاخیر در تبادل است.
پاسخهای
دریافتی از فرامین HTTP GET اغلب به شکل حجم انبوهی از انتقالات فایلهای
کوچک انجام میشود که در آن فرآیند شروع کند به ندرت اتفاق میافتد.
بنابراین تاخیر در برقراری و خاتمه session ها به یک تاثیر مخرب قابل توجه
در مدت برقراری این sessionها تبدیل میشود. همچنین یک بازدید معمولی از یک
وبسایت معروف میتواند دائما بین 10 تا 25 پرسش و پاسخ DNS را به همراه
داشته باشد که اگر به واسطه bufferbloat سرعت آن کم شود این کندی کاملا به
چشم خواهد آمد.